Client/server network environments have become ubiquitous. It is routine today for client computing systems to connect over a network to a server. Competition among network hardware and software providers drives them to offer more and more sophisticated products. One particular feature of network computing systems that is a point of competition is file system performance. Computing system developers strive to provide network servers with robust file system performance.
One limitation on server performance is the physical limitation of available server resources, such as hard disk space, processor power, and available memory. The amount of available memory can be particularly important in situations where multiple clients connect to a server simultaneously, as frequently occurs. More specifically, when multiple clients connect to the server, the server must allocate its resources to each of the clients. One example is receive buffers used to support file system transactions between the clients and the server. Every receive buffer allocated to a particular client consumes a certain amount of memory. In addition, different clients vary in their respective need for available server resources.
When the available resources exceeds the number of resources being requested by all the clients, there should be no noticeable performance impact on any one client because any one client could simple attempt to negotiate more resources. However, as happens with increasing frequency today, sometimes the number of resources being requested by the clients exceeds the available resources. Today, that situation is handled by simply refusing to accept new connections. In other words, once a client has been allocated buffers or other resources, those resources remain allocated until the client releases them.
While this is one solution to the problem, the inventors have determined that this is an inequitable solution because in many cases, clients may have allocated but unused resources. If so, it seems unfair that a particular client with a disproportionate number of allocated server resources can continue to hold those resources to the exclusion of new clients, even if that client isn't making use of them.
An adequate mechanism for allocating server resources to multiple clients in an equitable manner has eluded those skilled in the art.